/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio.ui;

import datos.*;
import interfaz.*;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import negocio.admnistrador.administrador;
import negocio.contenedor.lista_tratamiento;

/**
 *
 * @author David
 */
public class uiClinica implements Serializable{

    private static uiClinica ui = null;
    private administrador admin = new administrador();
    private NuevoclienteFrame NuevoclienteF;
    private clienteFrame clienteF;
    private expedienteFrame expedienteF;
    private NuevoExpedienteFrame_express nuevo_expediente_express;
    private AgregarTratamientoFrame agregar_tratamiento_F;
    private Dibujo dibujo;
    private OdontogramaFrame odontograma;
    
    public uiClinica() {
    }
    
    public static uiClinica getInstance(){
        if(ui == null){
            ui = new uiClinica();
        }
        return ui;
    }
    
    public void iniciar(){
        System.out.println("Se inicia el sistema.");
        NuevoclienteF = new NuevoclienteFrame();
        NuevoclienteF.setVisible(false);
        
        expedienteF = new expedienteFrame();
        expedienteF.setVisible(false);
        
        clienteF = new clienteFrame();
        clienteF.setVisible(false);
        
        agregar_tratamiento_F = new AgregarTratamientoFrame();
        agregar_tratamiento_F.setVisible(false);
        
        nuevo_expediente_express = new NuevoExpedienteFrame_express();
        nuevo_expediente_express.setVisible(false);        
        System.out.println("Frames iniciados");
        
        conectar();
        System.out.println("Conexion a base datos lista.");
        
        admin.cargar_lista_cliente();
        admin.cargar_lista_hm();
        admin.cargar_lista_tratamiento();
        
        System.out.println(admin.getListaTratamiento().toString());
        
        System.out.println("Datos cargados a listas locales.");
        
        actualizar_lista_cliente(expedienteF.getList_clientes());
        actualizar_lista_cliente(clienteF.getList_cliente());
        
        
        dibujo = new Dibujo();
        dibujo.setVisible(false);
        
        odontograma = new OdontogramaFrame();
        odontograma.setVisible(false);
        
    }
     
    /*
     * El metodo revisa si la variable es numerica o no.
     */
    public static boolean isNumeric(String texto){
        try{
            Integer.parseInt(texto);
            return true;
        }catch(NumberFormatException nfe){
            return false;
        }
    
    }
    /*
     * Este metodo produce una connecion con la base de datos
     */
    public void conectar(){
        admin.conectar();
    }
   
    
    /*****************************************************************CLIENTES*****************************************************************/
    /*
     * Este metodo abre un nuevo frame para agregar.
     */
    public void agregar_cliente_frame(){
        NuevoclienteF.dispose();
        NuevoclienteF = new NuevoclienteFrame();       
    }
    
    /*
     * Este metodo abre un nuevo frame para moficar el cliente.
     */
    public void modificar_cliente_frame(cliente c){
        NuevoclienteF.dispose();
        NuevoclienteF = new NuevoclienteFrame();
        NuevoclienteF.modificar_cliente(c);
    }
              
    
    /*
     * Metodo invocado cuando se presiona el boton de agregar cliente
     * Retorna null si el cliente fue agregado exitosamente, retorna el error de lo contrario.
     */
    public String agregar_cliente(NuevoclienteFrame frame) {
        //Se revisa que todos los datos del cliente esten llenos.
        if(!(frame.getTxt_apellidos_cliente().getText() == null && frame.getTxt_cedula_cliente() == null && frame.getTxt_celular_cliente().getText() == null && frame.getTxt_direccion_cliente().getText() == null
                && frame.getTxt_email_cliente().getText() == null && frame.getTxt_fax_cliente().getText() == null && frame.getTxt_lugar_trabajo_cliente().getText() == null && frame.getTxt_nombre_cliente().getText() == null
                && frame.getTxt_ocupacion_cliente().getText() == null && frame.getTxt_telefono_cliente().getText() == null && frame.getTxt_telefono_trabajo_cliente().getText() == null 
                && frame.getSpinner_fecha_nacimiento_cliente().getValue() == null && frame.getBtngrp_Genero_cliente().isSelected(null) == false)){
            //Se revisa el formato de la fecha
            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
            Date fecha_nacimiento_cliente = (Date) frame.getSpinner_fecha_nacimiento_cliente().getValue();
            SimpleDateFormat fecha_nacimiento_cliente_formato =  new SimpleDateFormat(formatter.format(fecha_nacimiento_cliente));
            
            if(fecha_nacimiento_cliente_formato != null){
                //Se revisa que todos los datos numericos sean numericos.
                String cliente_cedula = frame.getTxt_cedula_cliente().getText();
                String cliente_telefono = frame.getTxt_telefono_cliente().getText();
                String cliente_celular = frame.getTxt_celular_cliente().getText();
                String cliente_fax = frame.getTxt_fax_cliente().getText();
                String cliente_telefono_trabajo = frame.getTxt_telefono_trabajo_cliente().getText();                        
                if(isNumeric(cliente_cedula) && isNumeric(cliente_telefono) && isNumeric(cliente_celular) && isNumeric(cliente_fax) && isNumeric(cliente_telefono_trabajo)){
                    //Se revisan los datos del encargado si estos estan chequeados.
                    boolean tiene_encargado = false;
                    boolean continuar_encargado = false;
                    if(frame.getChk_encargado_cliente().isSelected()){
                        //Se checkean los datos del encargado para ver si estos son correctos.
                        if(!(frame.getTxt_apellidos_encargado().getText() == null && frame.getTxt_cedula_encargado().getText() == null && frame.getTxt_celular_encargado().getText() == null
                                && frame.getTxt_direccion_encargado().getText() == null && frame.getTxt_email_trabajo_encargado().getText() == null && frame.getTxt_fax_encargado().getText() == null
                                && frame.getTxt_lugar_trabajo_encargado().getText() == null && frame.getTxt_nombre_encargado().getText() == null && frame.getTxt_ocupacion_encargado().getText() == null
                                && frame.getTxt_parentesco_encargado().getText() == null && frame.getTxt_telefono_encargado().getText() == null && frame.getTxt_telefono_trabajo_encargado().getText() == null
                                && frame.getBtngrp_genero_encargado().isSelected(null) == false && frame.getSpinner_fecha_nacimiento_encargado().getValue() == null)){
                            //Se revisa la fecha de nacimiento.                            
                            Date fecha_nacimiento_encargado = (Date) frame.getSpinner_fecha_nacimiento_encargado().getValue();
                            SimpleDateFormat fecha_nacimiento_encargado_formato =  new SimpleDateFormat(formatter.format(fecha_nacimiento_encargado));
                            if(fecha_nacimiento_encargado_formato != null){
                                //Se revisan que los datos numericos sean numericos
                                String cedula_encargado = frame.getTxt_cedula_encargado().getText();
                                String telefono_encargado = frame.getTxt_telefono_encargado().getText();
                                String celular_encargado = frame.getTxt_celular_encargado().getText();
                                String fax_encargado = frame.getTxt_fax_encargado().getText();
                                String telefono_trabajo_encargado = frame.getTxt_telefono_trabajo_encargado().getText();
                                if(isNumeric(cedula_encargado) && isNumeric(telefono_encargado) && isNumeric(celular_encargado) 
                                        && isNumeric(fax_encargado) && isNumeric(telefono_trabajo_encargado)){
                                    continuar_encargado = true;
                                    //el cliente si tiene encargado.
                                    tiene_encargado = true;
                                }else{
                                    return "Datos Invalidos!";
                                }
                            }else{
                                return "ERROR: Formato de Fecha invalido.";
                            }
                        }else{
                            return "Favor llenar todos los datos del encargado.";
                        }
                        
                    }else{
                        //la casilla del encargado no esta checkeada, continuar
                        continuar_encargado = true;
                    }
                    
                    if(continuar_encargado){
                        //El cliente no tiene cargado el proceso de validacion continua  
                        Date fecha_nacimiento = (Date) frame.getSpinner_fecha_nacimiento_cliente().getValue();
                        int id_cliente_cedula = Integer.parseInt(frame.getTxt_cedula_cliente().getText());
                        String nombre = frame.getTxt_nombre_cliente().getText();
                        String apellidos = frame.getTxt_apellidos_cliente().getText();
                        String estado_civil = frame.getCombo_estado_civil().getSelectedItem().toString();
                        char genero;
                        if(frame.getRadio_genero_f_cliente().isSelected()){
                            genero = 'F';
                        }else if(frame.getRadio_genero_m_cliente().isSelected()){
                            genero = 'M';
                        }else{
                            genero = 'M';
                        }
                        String direccion = frame.getTxt_direccion_cliente().getText();
                        int telefono = Integer.parseInt(frame.getTxt_telefono_cliente().getText());
                        int celular = Integer.parseInt(frame.getTxt_celular_cliente().getText());
                        int fax = Integer.parseInt(frame.getTxt_fax_cliente().getText());
                        String email = frame.getTxt_email_cliente().getText();
                        String ocupacion = frame.getTxt_ocupacion_cliente().getText();
                        String lugar_trabajo = frame.getTxt_lugar_trabajo_cliente().getText();
                        int telefono_lugar_trabajo = Integer.parseInt(frame.getTxt_telefono_trabajo_cliente().getText());
                        encargado encargado = null;
                            if(tiene_encargado){
                                //Si el cliente tiene encargado se buscan los datos del mismo.
                                    int id_encargado_cedula_encargado = Integer.parseInt(frame.getTxt_cedula_encargado().getText());
                                    String parentesco_encargado = frame.getTxt_parentesco_encargado().getText();
                                    String nombre_encargado = frame.getTxt_nombre_encargado().getText();
                                    String apellidos_encargado = frame.getTxt_apellidos_encargado().getText();
                                    Date fecha_nacimiento_encargado = (Date) frame.getSpinner_fecha_nacimiento_encargado().getValue();
                                    //Revision de 
                                    char genero_encargado;                                    
                                    if(frame.getRadio_genero_f_encargado().isSelected()){
                                        genero_encargado = 'F';
                                    }else if(frame.getRadio_genero_m_encargado().isSelected()){
                                        genero_encargado = 'M';
                                    }else{
                                        genero_encargado = 'M';
                                    }                                                                     
                                    String direccion_encargado = frame.getTxt_direccion_encargado().getText();
                                    int telefono_encargado = Integer.parseInt(frame.getTxt_telefono_encargado().getText());
                                    int celular_encargado = Integer.parseInt(frame.getTxt_celular_encargado().getText());
                                    int fax_encargado = Integer.parseInt(frame.getTxt_fax_encargado().getText());
                                    String ocupacion_encargado = frame.getTxt_ocupacion_encargado().getText();
                                    String lugar_trabajo_encargado = frame.getTxt_lugar_trabajo_encargado().getText();
                                    int telefono_lugar_trabajo_encargado = Integer.parseInt(frame.getTxt_telefono_trabajo_encargado().getText());
                                    String email_encargado = frame.getTxt_email_trabajo_encargado().getText();
                                    
                                    if(frame.getTxt_cedula_encargado().getText() != null && parentesco_encargado != null && nombre_encargado != null && apellidos_encargado != null && fecha_nacimiento_encargado != null && frame.getBtngrp_genero_encargado().getSelection().toString() != null &&
                                            direccion_encargado != null && frame.getTxt_telefono_encargado().getText() != null && frame.getTxt_celular_encargado().getText() != null && frame.getTxt_fax_encargado().getText() != null && ocupacion_encargado != null && lugar_trabajo_encargado != null && frame.getTxt_telefono_trabajo_encargado().getText() != null && email_encargado != null){
                                        //se inicializa la variable del encargado.                                    
                                        encargado = new encargado(id_encargado_cedula_encargado,parentesco_encargado,nombre_encargado,apellidos_encargado,fecha_nacimiento_encargado,genero_encargado,direccion_encargado,telefono_encargado,celular_encargado,fax_encargado,ocupacion_encargado,lugar_trabajo_encargado,telefono_lugar_trabajo_encargado,email_encargado);
                                    }else{
                                        return "Favor completar todos los campos del encargado";
                                    }                                    
                            }
                            
                            
                            if(!admin.existeID(id_cliente_cedula)){
                                if(admin.agregarCliente(new cliente(new Date(),fecha_nacimiento,id_cliente_cedula,nombre,apellidos,estado_civil,genero,direccion,telefono,celular,fax,email,ocupacion,lugar_trabajo,telefono_lugar_trabajo,encargado))){
                                    actualizar_lista_cliente(clienteF.getList_cliente());
                                    NuevoclienteF.dispose();
                                    resetNuevoClienteFrame();
                                    System.out.println("Se agrego al cliente "+nombre+" con la cedula "+cliente_cedula);
                                    return null;                            
                                }else{
                                    return "Error: El cliente no pudo ser agregado.";
                                }
                            }else{
                                return "Esa cedula ya existe..";
                            }
                        //Se agrega el cliente
                        
                        //Si el cliente fue agregado, entonces...                        
                        
                        
                    }else{
                        return "ERROR.";
                    }
                }else{
                    return "Datos invalidos, ";
                }
            }else{
                return "ERROR: Formato de Fecha invalido.";
            }        
        }else{
            return "Favor llenar todos los campos.";
        } 
    }//end of agregar_cliente
   
    
    /**
     * Este metodo abre el frame de modificacion de clientes.
     */
     public void modificar_cliente_frame(clienteFrame frame) {
        //se revisa que el dato no sea nulo
         if(frame.getList_cliente().getSelectedValue() != null){
            if(!(frame.getList_cliente().getSelectedValue().toString().equals(""))){
                String[] seleccion_partes = frame.getList_cliente().getSelectedValue().toString().split("/");           
                cliente c = admin.buscarCliente(Integer.parseInt(seleccion_partes[0]));
                
                if(c != null){
                    resetNuevoClienteFrame();                    
                    NuevoclienteF.modificar_cliente(c);
                    NuevoclienteF.setVisible(true);                    
                }else{
                    JOptionPane.showMessageDialog(null, "No se encontro ningun cliente", "", JOptionPane.ERROR_MESSAGE);
                }
            }else{
                JOptionPane.showMessageDialog(null, "Favor seleccionar un cliente..", "Error!", JOptionPane.ERROR_MESSAGE);
            }//if
         }else{
             JOptionPane.showMessageDialog(null, "Seleccione un cliente a modificar!");
         }
        
    }//fin de modificar_cliente_frame
    
    /**
     * Este metodo modifica al cliente en la base de datos.
     */
    public void modificar_cliente(NuevoclienteFrame frame) {
        try{
                Date fecha_nacimiento = (Date) frame.getSpinner_fecha_nacimiento_cliente().getValue();
                int id_cliente_cedula =  0; 
                if(!frame.getTxt_cedula_cliente().getText().equals(""))
                    id_cliente_cedula = Integer.parseInt(frame.getTxt_cedula_cliente().getText());
                String nombre = frame.getTxt_nombre_cliente().getText();
                String apellidos = frame.getTxt_apellidos_cliente().getText();
                String estado_civil = frame.getCombo_estado_civil().getSelectedItem().toString();
                char genero = frame.getBtngrp_Genero_cliente().getSelection().toString().charAt(0);
                String direccion = frame.getTxt_direccion_cliente().getText();
                int telefono = 0; 
                if(!frame.getTxt_telefono_cliente().getText().equals(""))
                    telefono = Integer.parseInt(frame.getTxt_telefono_cliente().getText());
                int celular = 0; 
                if(!frame.getTxt_celular_cliente().getText().equals(""))
                    Integer.parseInt(frame.getTxt_celular_cliente().getText());
                int fax = 0; 
                if(!frame.getTxt_fax_cliente().getText().equals(""))
                    fax = Integer.parseInt(frame.getTxt_fax_cliente().getText());
                String email = frame.getTxt_email_cliente().getText();
                String ocupacion = frame.getTxt_ocupacion_cliente().getText();
                String lugar_trabajo = frame.getTxt_lugar_trabajo_cliente().getText();
                int telefono_lugar_trabajo = 0;//
                if(!frame.getTxt_telefono_trabajo_cliente().getText().equals(""))
                    telefono_lugar_trabajo = Integer.parseInt(frame.getTxt_telefono_trabajo_cliente().getText());
                encargado encargado = null;
                
            boolean cliente_modificado = admin.modificar_cliente(new cliente(null,fecha_nacimiento, id_cliente_cedula,nombre,apellidos,estado_civil,genero,direccion,telefono,celular,fax,email,ocupacion,lugar_trabajo,telefono_lugar_trabajo,encargado));
            if(cliente_modificado){
                admin.cargar_lista_cliente();
                actualizar_lista_cliente(expedienteF.getList_clientes());
                actualizar_lista_cliente(clienteF.getList_cliente());
                NuevoclienteF.setVisible(false);
                resetNuevoClienteFrame();
                JOptionPane.showMessageDialog(null, "El cliente fue modificado!");
                System.out.println("Se modifico al cliente "+nombre+" de cedula "+id_cliente_cedula);
            }else{
                JOptionPane.showMessageDialog(null, "El cliente no pudo ser agregado en la base de datos", "", JOptionPane.ERROR_MESSAGE);
            }
            
        }catch(NumberFormatException ex){
            JOptionPane.showMessageDialog(null, "Favor revisar los campos estos deben ser numericos");
        }
    }
    /**
     * Este metodo elimina un cliente de la lista de clientes.
     */
    public void eliminar_cliente(clienteFrame frame) {
        try{
            int confirmar_eliminacion = JOptionPane.showConfirmDialog(null, "Desea eliminar al cliente?","", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
            if(confirmar_eliminacion == JOptionPane.YES_OPTION){
                String[] cedula_cliente_eliminar = frame.getList_cliente().getSelectedValue().toString().split("/");
                if(admin.eliminar_cliente(Integer.parseInt(cedula_cliente_eliminar[0]))){
                    JOptionPane.showMessageDialog(null, "El cliente fue eliminado!");
                    System.out.println("Se elimino al cliente de cedula "+cedula_cliente_eliminar);
                }else{
                    JOptionPane.showMessageDialog(null, "El cliente no pudo se eliminado!");
                }   
                admin.cargar_lista_cliente();
                actualizar_lista_cliente(clienteF.getList_cliente());
                actualizar_lista_cliente(expedienteF.getList_clientes());                
            }
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Error!", "", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    /**
     * 
     */
    public void actualizar_lista_cliente(JList lista){
        admin.actualizar_lista_cliente(lista);
    }
    
    public void buscarClientes(clienteFrame frame) {
        if(!frame.getTxt_buscar_cliente().getText().equals("")){
             admin.buscarClientesLista(frame.getTxt_buscar_cliente().getText(), frame.getList_cliente());
        }else{
           admin.actualizar_lista_cliente(frame.getList_cliente());
        }//if
    }
    
    public void buscarInfoCliente(clienteFrame frame) {
        if(frame.getList_cliente().getSelectedValue() == null){
            frame.getTxt_info_cliente().setText("Favor seleccionar un cliente...");
        }else{
            String[] split_cliente = frame.getList_cliente().getSelectedValue().toString().split("/");
            cliente c = admin.buscarCliente(Integer.parseInt(split_cliente[0]));
            if(c != null){
                String telefono = "";
                if(c.getTelefono() != 0)
                    telefono = c.getTelefono()+"";
                String celular = "";
                if(c.getCelular() != 0)
                    celular = c.getCelular()+"";
                String fax = "";
                if(c.getFax() != 0)
                    fax = c.getFax()+"";
                String telefono_trabajo = "";
                if(c.getTelefono_lugar_trabajo() != 0) 
                    telefono_trabajo = c.getTelefono_lugar_trabajo()+"";
                frame.getTxt_info_cliente().setText("Cliente: "+c.getNombre()+" "+c.getApellidos()+"\n"
                                                    +"Cedula Cliente:"+c.getId_cliente_cedula()+"\n"
                                                    +"Fecha Nacimiento: "+c.getFecha_nacimiento()+"\n"
                                                    +"Telefono: "+ telefono +"\n"
                                                    +"Celular: "+celular+"\n"
                                                    +"Fax: "+fax+"\n"
                                                    +"Email: "+c.getEmail()+"\n"
                                                    +"Ocupacion: "+c.getOcupacion()+"\n"
                                                    +"Lugar Trabajo: "+c.getLugar_trabajo()+"\n"
                                                    +"Telefono(Lugar Trabajo: "+telefono_trabajo+"\n"
                                                    +"Direccion: "+c.getDireccion()+"\n"
                                                    );
            }//if
        }//if
        
    }//func buscarInfoCLiente

    
    /*****************************************************************Expedientes*****************************************************************/
    
    
     
    
    /*
     * Este metodo es invocado cuando se presiona el boton de agregar expediente.
     */
    public void agregar_expediente(NuevoExpedienteFrame_express frame) {
        try{
            //Campos no estan vacios
            if(!frame.getTxt_apellidos_expediente().getText().equals("") && !frame.getTxt_nombre_expediente().getText().equals("") && !frame.getTxt_cedula_expediente().getText().equals("")){
                //La cedula es numerico.
                if(isNumeric(frame.getTxt_cedula_expediente().getText())){
                    //Variables para la creacion del cliente 
                    String apellidos = frame.getTxt_apellidos_expediente().getText();
                    String nombre = frame.getTxt_nombre_expediente().getText();
                    int cedula_cliente = Integer.parseInt(frame.getTxt_cedula_expediente().getText());                    
                    //se crea el cliente nuevo.
                    cliente cliente_nuevo = new cliente(new Date(), cedula_cliente, nombre, apellidos);
                        /*se agregan todos los campos necesarios a la base de datos.
                         Cliente, historia medica, examenes, odontograma, tratamientos*/
                        if(!admin.existeID(cedula_cliente)){
                            admin.agregarCliente(cliente_nuevo);
                            admin.agregar_historia_medica(new historia_medica(cliente_nuevo));
                            JOptionPane.showMessageDialog(null, "El expediente fue agregado.");
                            nuevo_expediente_express.setVisible(false);
                            nuevo_expediente_express.getTxt_apellidos_expediente().setText("");
                            nuevo_expediente_express.getTxt_cedula_expediente().setText("");
                            nuevo_expediente_express.getTxt_nombre_expediente().setText("");
                        }else{
                            JOptionPane.showMessageDialog(null, "Esa cedula ya existe... ");
                        }                        
                }else{
                    JOptionPane.showMessageDialog(null, "La cedula debe ser un numero.","",JOptionPane.ERROR_MESSAGE);
                }                
            }else{
                JOptionPane.showMessageDialog(null, "Favor llenar todos los datos.","",JOptionPane.ERROR_MESSAGE);
            }
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, "Error!", "", JOptionPane.ERROR_MESSAGE);
        }
        
        
        
        
        
    }
    
    public void cargar_expediente(expedienteFrame frame) {
        String[] cliente_array =  frame.getList_clientes().getSelectedValue().toString().split("/");
        cliente c = admin.buscarCliente(Integer.parseInt(cliente_array[0]));
        System.out.println(cliente_array[0]);
        historia_medica hm = admin.buscar_historia_medica(Integer.parseInt(cliente_array[0]));
        //Se colocan todas la variables de la historia medica en el frame.
        if(hm != null){
            if(hm.getEn_caso_emergencia_avisar() != null)
                frame.getTxt_caso_emergencia_historia().setText(hm.getEn_caso_emergencia_avisar());
            if(hm.getDireccion() != null)
                frame.getTxt_direccion_emergencia_historia().setText(hm.getDireccion());
            if(hm.getNombre_medico() != null)
                frame.getTxt_nombre_medico_historia().setText(hm.getNombre_medico());
            if(hm.getParentesco() != null)
                frame.getTxt_parentesco_emergencia_historia().setText(hm.getParentesco());
            if(hm.getPregunta_numero(1) != null)
                frame.getTxt_pregunta_1_historia().setText(hm.getPregunta_numero(1));
            if(hm.getPregunta_numero(2) != null)
                frame.getTxt_pregunta_2_historia().setText(hm.getPregunta_numero(2));
            if(hm.getPregunta_numero(3) != null)
                frame.getTxt_pregunta_3_historia().setText(hm.getPregunta_numero(3));
            if(hm.getPregunta_numero(4) != null)
                frame.getTxt_pregunta_4_historia().setText(hm.getPregunta_numero(4));
            if(hm.getPregunta_numero(5) != null)
                frame.getTxt_pregunta_5_historia().setText(hm.getPregunta_numero(5));
            if(hm.getPregunta_numero(6) != null)
                frame.getTxt_pregunta_6_historia().setText(hm.getPregunta_numero(6));
            if(hm.getPregunta_numero(7) != null)
                frame.getTxt_pregunta_7_historia().setText(hm.getPregunta_numero(7));
            if(hm.getTelefono() != 0)
                frame.getTxt_telefono_emergencia_historia().setText(hm.getTelefono()+"");        
        }else{
            System.out.println("ERROR: La historia medica no existe con respecto al cliente");
        }
        
    }
    /**
     * Este metodo guarda los cambios del expiende perteneciente a un cliente.
     */
    public void guardar_expediente(expedienteFrame frame) {
        //guardar historia medica
        String[] split_cliente = frame.getList_clientes().getSelectedValue().toString().split("/");
        cliente c = admin.buscarCliente(Integer.parseInt(split_cliente[0].toString()));
        String nombre_medico = frame.getTxt_nombre_medico_historia().getText();
        String tipo_sangre = frame.getCombo_tipo_sangre_historia().getSelectedItem().toString();
        String caso_emergencia = frame.getTxt_caso_emergencia_historia().getText();
        //Validacion del telefono TEMPORAL
            String telefono_text = frame.getTxt_telefono_emergencia_historia().getText();  
                int telefono = 0;        
                if(!telefono_text.equals("")){
                    telefono = Integer.parseInt(telefono_text);
                }        
        String direccion = frame.getTxt_direccion_emergencia_historia().getText();
        String parententesco = frame.getTxt_parentesco_emergencia_historia().getText();
        String[] preguntas = {frame.getTxt_pregunta_1_historia().getText(),
                              frame.getTxt_pregunta_2_historia().getText(),
                              frame.getTxt_pregunta_3_historia().getText(),
                              frame.getTxt_pregunta_4_historia().getText(),
                              frame.getTxt_pregunta_5_historia().getText(),
                              frame.getTxt_pregunta_6_historia().getText(),
                              frame.getTxt_pregunta_7_historia().getText()                              
                            };
        
        historia_medica hm = new historia_medica(c, nombre_medico, tipo_sangre, caso_emergencia, telefono, direccion, parententesco, preguntas, null);
        boolean modificado = admin.modificar_historia_medica(hm);
        if(modificado){
            JOptionPane.showMessageDialog(null, "Expediente Modificado!");
        }else{
            JOptionPane.showMessageDialog(null, "Expediente no pudo ser modificado!");
        }
    }//func guardar_expediente
    
    
    /*****************************************************************Frames*****************************************************************/
    
    /*
     * Este metodo le da reset al frame cliente, este recibe el motivo ya sea agregar o modificar.
     */
    public void resetNuevoClienteFrame(){
        this.NuevoclienteF = new NuevoclienteFrame();
    }
    
    public void resetAgregarExpedienteFrame(){        
        this.agregar_tratamiento_F = new AgregarTratamientoFrame();
    }
    
    
        
    /*****************************************************************ODONTOGRAMA*****************************************************************/
    
   // public void creaOdontograma(String nombre)
   // {
   //    String nombreCliente = nombre;
   //    admin.creaOdontograma(nombre,dibujo);
   // }
    
    public void guardaOdontograma(int id,Diente diente,boolean b)
    {
       admin.guardaOdontograma(id, diente,b);
    }
    
    public Diente cargarOdontograma(int id,Diente d){
       Diente diente = admin.cargarOdontograma(id,d);
       return diente;
    }
    
    
    public void llenaLista(OdontogramaFrame o){
    
        int i;
        for(int cont=0;cont<admin.getListacliente().getLista_cliente().size();cont++)
        {
           // i = o.getjListClientes().getModel().getSize();
            String nombre = admin.getListacliente().getLista_cliente().get(cont).getNombre();
            //o.getjListClientes().setName(nombre);
            o.model.addElement(nombre);
            
        }
        o.getjListClientes().setModel(o.model);
    }
    
    public void cargaIDs(JComboBox o){     
       admin.cargaIDs(o);

    }
    
    public void modificaExamenes(expedienteFrame fr){
        admin.modificaExamenes(fr);
    }
    
    public boolean guardaExamen(int id){
        return admin.guardarExamen(id);
    }
    
    public void cargaExamen(expedienteFrame fr) {
        reseteaRadioButton(fr);
        String[] split_cliente = fr.getList_clientes().getSelectedValue().toString().split("/");
        examen ex = admin.cargaExamen(Integer.parseInt(split_cliente[0].toString()));

        if (ex != null) {


            if (ex.getCaries().equals("true")) {
                fr.getjRadioButtonCarieSI().setSelected(true);
            } else {
                fr.getjRadioButtonCarieNO().setSelected(true);
            }

            if (ex.getProblemas_periodental().equals("true")) {
                fr.getjRadioButtonProPeriodentalSI().setSelected(true);
            } else {
                fr.getjRadioButtonProPeriodentalNO().setSelected(true);
            }

            if (ex.getProblemas_atm().equals("true")) {
                fr.getjRadioButtonProATMSI().setSelected(true);
            } else {
                fr.getjRadioButtonProATMNO().setSelected(true);
            }

            if (ex.getOtra_patologia().equals("true")) {
                fr.getjRadioButtonOtroTipoPatologiaSI().setSelected(true);
            } else {
                fr.getjRadioButtonOtroTipoPatologiaNO().setSelected(true);
            }

            if (ex.getPanoramica().equals("true")) {
                fr.getjRadioButtonRadioPanoramica().setSelected(true);
            } else {
                fr.getjRadioButtonRadioPanoramica().setSelected(false);
            }

            if (ex.getPeriapciales().equals("true")) {
                fr.getjRadioButtonRadioPeriapciales().setSelected(true);
            } else {
                fr.getjRadioButtonRadioPeriapciales().setSelected(false);
            }

            if (ex.getAleta().equals("true")) {
                fr.getjRadioButtonRadioAleta().setSelected(true);
            } else {
                fr.getjRadioButtonRadioAleta().setSelected(false);
            }

            if (ex.getOclusal().equals("true")) {
                fr.getjRadioButtonRadioOclusal().setSelected(true);
            } else {
                fr.getjRadioButtonRadioOclusal().setSelected(false);
            }

            if (ex.getOtro().equals("true")) {
                fr.getjRadioButtonOtroTipo().setSelected(true);
            } else {
                fr.getjRadioButtonOtroTipo().setSelected(false);
            }

            if (ex.getPresencia_patologica().equals("true")) {
                fr.getjRadioButtonPrePatologiaSI().setSelected(true);
            } else {
                fr.getjRadioButtonPrePatologiaNO().setSelected(true);
            }

            fr.getjTextAreaEspecificar().setText(ex.getOtra_patologia_especificacion());
            fr.getjTextAreaObservaciones().setText(ex.getObservaciones());


        }

    }
    
    public void reseteaRadioButton(expedienteFrame fr){
        
                fr.getjRadioButtonCarieSI().setSelected(false);
                fr.getjRadioButtonCarieNO().setSelected(false);
                fr.getjRadioButtonProPeriodentalSI().setSelected(false);
                fr.getjRadioButtonProPeriodentalNO().setSelected(false);
                fr.getjRadioButtonProATMSI().setSelected(false);
                fr.getjRadioButtonProATMNO().setSelected(false);
                fr.getjRadioButtonOtroTipoPatologiaSI().setSelected(false);
                fr.getjRadioButtonOtroTipoPatologiaNO().setSelected(true);
                fr.getjRadioButtonRadioPanoramica().setSelected(false);
                fr.getjRadioButtonRadioPanoramica().setSelected(false);
                fr.getjRadioButtonRadioPeriapciales().setSelected(false);
                fr.getjRadioButtonRadioPeriapciales().setSelected(false);
                fr.getjRadioButtonRadioAleta().setSelected(false);
                fr.getjRadioButtonRadioAleta().setSelected(false);
                fr.getjRadioButtonRadioOclusal().setSelected(false);
                fr.getjRadioButtonRadioOclusal().setSelected(false); 
                fr.getjRadioButtonOtroTipo().setSelected(false);
                fr.getjRadioButtonOtroTipo().setSelected(false);
                fr.getjRadioButtonPrePatologiaSI().setSelected(false);
                fr.getjRadioButtonPrePatologiaNO().setSelected(false);

    
    }
    
    
    /*****************************************************************TRATAMIENTOS*****************************************************************/
    
    public void agregarTratamientoFrame(expedienteFrame frame) {
        agregar_tratamiento_F.setAccion_tratamineto(0);
            String[] split_cliente = frame.getList_clientes().getSelectedValue().toString().split("/");        
            agregar_tratamiento_F.setC(admin.buscarCliente(Integer.parseInt(split_cliente[0])));
        agregar_tratamiento_F.setVisible(true);
    }
    
    public void agregarTratamiento(AgregarTratamientoFrame frame) {
        Date fecha = new Date();
        String pieza = frame.getTxt_pieza_tratamiento().getText();
        String desc = frame.getTxt_desc_tratamiento().getText();
        String indicaciones = frame.getTxt_indicaciones_tratamiento().getText();
        cliente c = frame.getC();
        
        if(fecha != null && pieza != null && desc != null && indicaciones != null && c != null ){
            tratamiento t = new tratamiento(c, fecha, pieza, desc, indicaciones);
            admin.agregarTratamiento(t);            
            cargar_tratamientos_tabla(expedienteF);
            JOptionPane.showMessageDialog(null, "Tratamineto Agregado!");
            agregar_tratamiento_F.setVisible(false);
            resetAgregarExpedienteFrame();
        }else{
            JOptionPane.showMessageDialog(null, "Datos incompletos... Favor revisar.");
        }
        
        
    }
    
    public void cargar_tratamientos_tabla(expedienteFrame frame) {
        DefaultTableModel model = (DefaultTableModel) frame.getTable_trataminetos().getModel();
//        DefaultTableModel model = new DefaultTableModel();        
//        model.addColumn("Numero");
//        model.addColumn("Fecha");
//        model.addColumn("Pieza");
//        model.addColumn("Descripcion");
//        model.addColumn("Indicaciones");        
        while (model.getRowCount()>0){
            model.removeRow(0);
        }   
        String[] split_list = frame.getList_clientes().getSelectedValue().toString().split("/");
        
        for(int i = 0; i < admin.getListaTratamiento().getLista().size(); i++){
            tratamiento t = admin.getListaTratamiento().getLista().get(i);
            if(Integer.parseInt(split_list[0])==t.getCliente().getId_cliente_cedula()){
                int numero = t.getNumero();
                Date fecha = t.getFecha();
                String pieza = t.getPieza();                        
                String desc = t.getDescripcion();
                String indicaciones = t.getIndicaciones();
                model.addRow(new Object[]{numero,fecha,pieza,desc,indicaciones});
            }//if
        }//for
        frame.getTable_trataminetos().setModel(model);
    }
    
    public void verTratamiento(expedienteFrame frame) {
        tratamiento t = admin.buscarTratamiento(Integer.parseInt(frame.getTable_trataminetos().getValueAt(frame.getTable_trataminetos().getSelectedRow(), 0).toString()));
        JOptionPane.showMessageDialog(null, "Nombre:"+t.getCliente().getNombre()+" "+t.getCliente().getApellidos()+"\n"
                                            +"Pieza: "+ t.getPieza()+"\n"
                                            +"Descripcion: "+t.getDescripcion()+"\n"
                                            +"Indicaciones: "+t.getIndicaciones()
                                            );
    }
    
    public void modificar_tratamineto_frame(expedienteFrame frame) {
        int id_tratamiento = Integer.parseInt(frame.getTable_trataminetos().getValueAt(frame.getTable_trataminetos().getSelectedRow(), 0).toString());
        tratamiento t = admin.buscarTratamiento(id_tratamiento);
        agregar_tratamiento_F.clear();
        agregar_tratamiento_F.setC(t.getCliente());
        agregar_tratamiento_F.setAccion_tratamineto(1);
        agregar_tratamiento_F.getTxt_desc_tratamiento().setText(t.getDescripcion());
        agregar_tratamiento_F.getTxt_indicaciones_tratamiento().setText(t.getIndicaciones());
        agregar_tratamiento_F.getTxt_pieza_tratamiento().setText(t.getPieza());
        agregar_tratamiento_F.setId_tratamiento(id_tratamiento);
        agregar_tratamiento_F.reset();
        agregar_tratamiento_F.setVisible(true);
    }
    
    public void modificar_tratamiento(AgregarTratamientoFrame frame) {
        int id = frame.getId_tratamiento();
        cliente c = frame.getC();
        String pieza = frame.getTxt_pieza_tratamiento().getText();
        String indicaciones = frame.getTxt_indicaciones_tratamiento().getText();
        String desc = frame.getTxt_desc_tratamiento().getText();
        if(pieza != null && indicaciones != null && desc != null){
            boolean modificado = admin.modificar_tratamiento(new tratamiento(id, c, null, pieza, desc, indicaciones));
            if(modificado){
                JOptionPane.showMessageDialog(null, "El tratamiento fue modificado");
                agregar_tratamiento_F.setVisible(false);
                resetAgregarExpedienteFrame();
                cargar_tratamientos_tabla(expedienteF);
            }else{
                JOptionPane.showMessageDialog(null, "ERROR!!! El tratamiento NO fue modificado","", JOptionPane.ERROR_MESSAGE);
            }
        }else{
            JOptionPane.showMessageDialog(null, "Favor completar los datos","", JOptionPane.ERROR_MESSAGE);
        }//if        
    }
    
    public void eliminarTratamiento(expedienteFrame frame) {
         int id_tratamiento = Integer.parseInt(frame.getTable_trataminetos().getValueAt(frame.getTable_trataminetos().getSelectedRow(), 0).toString());
         if(JOptionPane.showConfirmDialog(null, "Desea eliminar el tratamiento # "+id_tratamiento,"", JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.YES_OPTION){
             admin.eliminar_tratamiento(id_tratamiento);
             cargar_tratamientos_tabla(expedienteF);
         }
    }
    
    /*****************************************************************GETS & SETS*****************************************************************/
   
    public administrador getAdmin() {
        return admin;
    }

    public void setAdmin(administrador admin) {
        this.admin = admin;
    }

    public NuevoclienteFrame getNuevoClienteF() {
        return NuevoclienteF;
    }

    public void setNuevoClienteF(NuevoclienteFrame clienteF) {
        this.NuevoclienteF = clienteF;
    }

    public expedienteFrame getExpedienteF() {
        return expedienteF;
    }

    public void setExpedienteF(expedienteFrame expedienteF) {
        this.expedienteF = expedienteF;
    }

    public clienteFrame getClienteF() {
        return clienteF;
    }

    public void setClienteF(clienteFrame clienteF) {
        this.clienteF = clienteF;
    }

    public NuevoclienteFrame getNuevoclienteF() {
        return NuevoclienteF;
    }

    public void setNuevoclienteF(NuevoclienteFrame NuevoclienteF) {
        this.NuevoclienteF = NuevoclienteF;
    }

    public NuevoExpedienteFrame_express getNuevo_expediente_express() {
        return nuevo_expediente_express;
    }

    public void setNuevo_expediente_express(NuevoExpedienteFrame_express nuevo_expediente_express) {
        this.nuevo_expediente_express = nuevo_expediente_express;
    }
    
    public Dibujo getDibujo()
    {
        return dibujo;
    }
    public OdontogramaFrame getOdonto()
    {
        return odontograma;
    }

    

    

    

    

    

    

    

    

    

  
}
